package pt.processingQueues.principal; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.logging.Level; import java.util.logging.Logger; public class SupermarketCheckout implements Runnable{ private static final Logger LOGGER = Logger.getLogger(SupermarketCheckout.class.getName()); private int id; private BlockingQueue<Client> clients=new ArrayBlockingQueue<Client>(100); private int serviceTime=0; private int waitingTime=0; private int clientsServed=0; private boolean isRunning; public SupermarketCheckout(){ this.isRunning=true; } public SupermarketCheckout(int id){ this.id=id; this.isRunning=true; } @Override public void run() { LOGGER.info("Logger Name: "+LOGGER.getName()+id); Client client=new Client(); int delay; while (true) { while (isRunning) { if (clients.size() > 0) { System.out.println(this.listToString()); try { client = clients.take(); } catch (InterruptedException ex) { System.out.println("EXCEPTION " + ex); } clientsServed++; delay = client.getServiceTime(); try { Thread.sleep(delay * 1000); waitingTime += serviceTime; serviceTime+= delay; System.out.println(this.toString()+" : "+client.toString()+" checked-out!"); } catch (InterruptedException ex) { LOGGER.log(Level.SEVERE, "Cannot take a client from queue", ex); } } else { //System.out.println(this.toString()+" is empty!\n"); //this.setRunning(false); } } } } /** * adds a client from the scheduler * @param client */ public void addClient(Client client){ System.out.println(client.toString()+" was added in: "+this.toString()); try { this.clients.put(client); } catch (InterruptedException e) { LOGGER.log(Level.SEVERE, "Cannot put a client in the queue", e); } } /** * @return isRunning (the thread) */ public boolean isRunning() { return isRunning; } /** * @param isRunning thread is running or not */ public void setRunning(boolean isRunning) { this.isRunning = isRunning; } /** * @return averageServiceTime */ public int avgServiceTime(){ if (clientsServed!=0) return serviceTime/clientsServed; return 0; } /** * @return averageWaitingTime */ public int avgWaitingTime(){ if (clientsServed!=0) return waitingTime/clientsServed; return 0; } /** * @return the clients */ public BlockingQueue<Client> getClients() { return clients; } /** * @return the clientsServed */ public int getClientsServed() { return clientsServed; } /** * prints the queue * @return */ public String listToString() { StringBuilder sb = new StringBuilder(); sb.append(this.toString() + "------"); for (Client client : clients) { sb.append(client.toString()); } return sb.toString()+"\n"; } /** * @see java.lang.Object#toString() */ @Override public String toString() { return "[SupermarketCheckout" + id + "]"; } }